package cc.rengu.redp.bizimpl.upmp.service;

import cc.rengu.redp.bizimpl.upmp.domain.BizTmp;
import cc.rengu.redp.bizimpl.upmp.vo.UpmpUserInfoVO;
import cc.rengu.redp.common.domain.QueryRequest;
import cc.rengu.redp.common.exception.RedpException;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
import java.util.Map;

/**
 * 临时表service
 *
 * @author zhangxu
 */
public interface IBizTmpService extends IService<BizTmp> {
    List<BizTmp> getBizTmpByMasterKey(String instId, String masterKey);

    /**
     * 保存临时表
     *
     * @param tmp BizTmp
     */
    public void saveTmp(BizTmp tmp);

    /**
     * @param tmp BizTmp
     */
    public void deleteAndInsert(BizTmp tmp);

    /**
     * 根据realid获取临时表实体
     *
     * @param id realid
     * @return
     */
    public BizTmp getBizTmpDetail(String id);

    /**
     * 保存主记录到临时表，判断临时表是否有数据有则修改，无则新增
     * @param entity
     * @param user
     * @param instId
     * @param bizOpr
     * @param updateTime
     * @param oprMenuId
     * @param oprMenuName
     * @param status
     * @param auditStatus
     * @param realId
     * @param webNextUrl
     * @param mchntNo
     * @param mchntName
     * @param termNo
     * @throws RedpException
     */
    @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW)
    void saveBizTmp(Object entity, UpmpUserInfoVO user, String instId, String bizOpr, String updateTime,
                    String oprMenuId, String oprMenuName, String status, String auditStatus, String realId, String webNextUrl
            , String mchntNo, String mchntName, String termNo)throws RedpException;

    /**
     * 保存明细记录到临时表，判断临时表是否有数据有则修改，无则新增
     * @param entity
     * @param user
     * @param instId
     * @param org
     * @param bizOpr
     * @param updateTime
     * @param oprMenuId
     * @param oprMenuName
     * @param status
     * @param auditStatus
     * @param realId
     * @param webNextUrl
     * @param detailFlag
     * @param masterKey
     * @param mchntNo
     * @param mchntName
     * @param termNo
     * @throws RedpException
     */
    @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW)
    void saveBizTmpDtl(Object entity, UpmpUserInfoVO user, String instId, String bizOpr, String updateTime,
                       String oprMenuId, String oprMenuName, String status, String auditStatus, String realId, String webNextUrl,
                       String detailFlag, String masterKey, String mchntNo, String mchntName, String termNo) throws RedpException;

    String convertOptFlagToBizOpr(String pageOptFlag);

    <T> T getObjFromBizTmp(String id, Class<T> clazz) throws RedpException;

    @Transactional
    void delete(String[] ids);

    @Transactional
    void delete(String id);

    @Transactional
    void delete(List<BizTmp> tmps);

    <T> List<T> getBizTmpByInstIdAndMasterKeyAndEname(String instId, Class<T> clazz, String masterKey)
            throws RedpException;

    List<BizTmp> getBizTmpByInstIdAndMasterKeyAndEname(String instId, String oprTableEname, String masterKey);

    List<BizTmp> getBizTmpByMchntCd(String mchntNo, String oprTableEname);

    void deleteBizTmpByMchntNo(String mchntNo, String tableName);

    List<BizTmp> getBizTmpByMchntCd(String mchntNo);

    void mergeBizTmps(List<BizTmp> delBizTmplist, List<BizTmp> newBizTmplist, List<BizTmp> updateBizTmplist) throws RedpException;


    public BizTmp getBizTmpByUniqueKey(String instId, String oprTableEname, String bizData1) throws RedpException;

    Map<String,Object> getBizTmp(String id , String instId);

    IPage<BizTmp> findPage(QueryRequest request, BizTmp bizTmp) throws RedpException;

    Map<String, Object> operMenuSelect2List(QueryRequest request, BizTmp bizTmp);

    Map<String, Object> userCheckPrivilege(String bizTmpId, String userId) throws RedpException;

    String getCheckUrl(String bizTmpId, String userId);
}
